提前预防K8s集群资源不足的处理方式配置 您所在的位置:网站首页 K8s gpu池化 提前预防K8s集群资源不足的处理方式配置

提前预防K8s集群资源不足的处理方式配置

#提前预防K8s集群资源不足的处理方式配置| 来源: 网络整理| 查看: 265

在管理集群的时候我们常常会遇到资源不足的情况,在这种情况下我们要保证整个集群可用,并且尽可能减少应用的损失。根据该问题提出以下两种方案:一种为优化kubelet参数,另一种为脚本化诊断处理。

1. 概念解释 CPU 的使用时间是可压缩的,换句话说它本身无状态,申请资源很快,也能快速正常回收。 内存(memory)大小是不可压缩的,因为它是有状态的(内存里面保存的数据),申请资源很慢(需要计算和分配内存块的空间),并且回收可能失败(被占用的内存一般不可回收)。 2. 优化kubelet参数

优化kubelet参数通过k8s资源表示、节点资源配置及kubelet参数设置、应用优先级和资源动态调整这几个方面来介绍。k8s资源表示为yaml文件中如何添加requests和limites参数。节点资源配置及kubelet参数设置描述为一个node上面资源配置情况,从而来优化kubelet参数。应用优先级描述为当资源不足时,优先保留那些pod不被驱逐。资源动态调整描述为运算能力的增减,如:HPA 、VPA和Cluster Auto Scaler。

2.1.1 k8s资源表示 在k8s中,资源表示配置字段是 spec.containers[].resource.limits/request.cpu/memory。yaml格式如下: spec: template: ... spec: containers: ... resources: limits: cpu: "1" memory: 1000Mi requests: cpu: 20m memory: 100Mi 2.1.2 资源动态调整

动态调整的思路:应用的实际流量会不断变化,因此使用率也是不断变化的,为了应对应用流量的变化,我们应用能够自动调整应用的资源。比如在线商品应用在促销的时候访问量会增加,我们应该自动增加 pod 运算能力来应对;当促销结束后,有需要自动降低 pod 的运算能力防止浪费。运算能力的增减有两种方式:改变单个 pod 的资源,已经增减 pod 的数量。这两种方式对应了 kubernetes 的 HPA 和 VPA和Cluster Auto Scaler。

HPA: 横向 pod 自动扩展的思路是这样的:kubernetes 会运行一个 controller,周期性地监听 pod 的资源使用情况,当高于设定的阈值时,会自动增加 pod 的数量;当低于某个阈值时,会自动减少 pod 的数量。自然,这里的阈值以及 pod 的上限和下限的数量都是需要用户配置的。 VPA: VPA 调整的是单个 pod 的 request 值(包括 CPU 和 memory)VPA 包括三个组件:(1)Recommander:消费 metrics server 或者其他监控组件的数据,然后计算 pod 的资源推荐值(2)Updater:找到被 vpa 接管的 pod 中和计算出来的推荐值差距过大的,对其做 update 操作(目前是 evict,新建的 pod 在下面 admission controller 中会使用推荐的资源值作为 request)(3)Admission Controller:新建的 pod 会经过该 Admission Controller,如果 pod 是被 vpa 接管的,会使用 recommander 计算出来的推荐值 CLuster Auto Scaler:能够根据整个集群的资源使用情况来增减节点。Cluster Auto Scaler 就是监控这个集群因为资源不足而 pending 的 pod,根据用户配置的阈值调用公有云的接口来申请创建机器或者销毁机器。 2.1.3 节点资源配置及kubelet参数设置

节点资源的配置一般分为 2 种:

资源预留:为系统进程和 k8s 进程预留资源 pod 驱逐:节点资源到达一定使用量,开始驱逐 pod包含如下:(1) Node Capacity:Node的所有硬件资源(2)kube-reserved:给kube组件预留的资源:kubelet,kube-proxy以及docker等(3) system-reserved:给system进程预留的资源(4) eviction-threshold:kubelet eviction的阈值设定(5)Allocatable:真正scheduler调度Pod时的参考值(保证Node上所有Pods的request resource不超过Allocatable)

allocatable的值即对应 describe node 时看到的allocatable容量,pod 调度的上限

计算公式:节点上可配置值 = 总量 - 预留值 - 驱逐阈值 Allocatable = Capacity - Reserved(kube+system) - Eviction Threshold

以上配置均在kubelet 中添加,涉及的参数有:

--kube-reserved=cpu=200m,memory=250Mi \ --system-reserved=cpu=200m,memory=250Mi \ --eviction-hard=memory.available


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有